Общий механизм работы¶
Работу механизма автоматического монтирования в Linux обеспечивают несколько компонентов.
Служба
autofs— запускает утилитуautomountот имени суперпользователя в момент загрузки операционной системы. Это systemd-служба, входит в состав deb-пакетаautofs.Утилита
automount— обеспечивает расстановку ловушек монтирования и подключение целевых файловых систем общих ресурсов в соответствии с настройками из конфигурационных файлов, основными из которых являются/etc/autofs.confи/etc/auto.master. Утилита входит в состав deb-пакетаautofs.Файловая система
autofs— монтируется утилитойautomountв первоначальный набор каталогов, чтобы превратить их в так называемые триггерные узлы (англ. trigger nodes) или ловушки монтирования (англ. mount traps). Файловая система реализована в виде модуля ядра операционной системыautofs4.ko. Когда модуль файловой системыautofsперехватывает запрос пользователя к каталогу, в который еще не смонтирована целевая файловая система общего ресурса, модуль обращается к запущенному экземпляру утилитыautomountдля выполнения этой операции. Взаимодействие между модулемautofs4и утилитойautomountосуществляется через именованные каналы (англ. FIFO, first input first output), файлы которых можно найти по маске/var/run/autofs.fifo-*.Файловая система
cifs— монтируется утилитойautomountпо запросу со стороны модуля ядраautofs4, когда пользователь обращается к файлам общего ресурса, для которого параметр «fstype» равен «cifs». Эта файловая система реализована в виде модуляcifs.ko.Утилита
mount.cifs— вызывается утилитойautomountдля монтирования общих ресурсов по протоколу CIFS (SMB). Утилита входит в состав deb-пакетаcifs-utils.
Рассмотрим работу механизма автоматического монтирования на примере простой общей папки с документами. Допустим, что в файле /etc/auto.master у нас определена строка для подключения карты косвенного монтирования /etc/auto.docs, а в карте /etc/auto.docs определена строка для монтирования общей папки share с файлового сервера fs-1.ald.company.lan в каталог /docs/share:
cat /etc/auto.master
...
/docs /etc/auto.docs
...
cat /etc/auto.docs
share -fstype=cifs,user,sec=krb5,cruid=$UID,uid=$UID,gid=$UID ://fs-1.ald.company.lan/share
На данном этапе, файл /docs является ловушкой монтирования в виртуальной файловой системе autofs. При взаимодействии пользователя с ловушкой монтирования как с директорией, запускается процедура монтирования директории с файлового сервера общей папки share с файлового сервера fs-1.ald.company.lan в каталог /docs. Поэтому /docs до момента взаимодействия с пользователем не является директорией.
Таким образом, в момент запуска утилита automount выполняет следующие действия:
Загружает пространство имен, начиная с главного файла
/etc/auto.master.Создает каталог
/docs, если его не было ранее.Монтирует в каталог
/docsфайловую системуautofs, чтобы установить ловушку монтирования. Проверить это можно с помощью утилитыfindmnt:
sudo findmnt
TARGET SOURCE FSTYPE OPTIONS
...
└─/docs /etc/auto.docs autofs rw,relatime,fd=7,pgrp=10901...
Теперь при первом обращении пользователя к каталогу /docs/share, например, с помощью утилиты cd или ls, сработает ловушка монтирования, установленная на каталог /docs. Модуль файловой системы autofs обратится к утилите automount, которая создаст каталог share и смонтирует в него общую папку с файлового сервера с помощью утилиты mount. Проверить это можно с помощью утилиты findmnt:
root@pc-1:~# findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda1 ext4 rw,relatime,errors=remount-ro
...
└─/docs /etc/auto.docs autofs rw,relatime,fd=7,pgrp=10901,timeout=300,...
└─/docs/share //fs-1.ald.company.lan/share cifs rw,nosuid,nodev,noexec,relatime, vers=3.1.1,sec=krb5,cruid=310400000,cache=strict,username=root,uid=310400000,noforceuid,gid=310400
Учитывая, что обычные пользователи работают с общими файловыми ресурсами не по прямым ссылкам, а из файлового менеджера, в файле /etc/autofs.conf рекомендуется установить параметр browse_mode = yes, чтобы имя общей папки share отображалось всегда, вне зависимости от того, примонтирована она или нет. По умолчанию установлено значение no для повышения производительности, но это актуально только в случае очень больших карт монтирования, в которых содержатся ссылки на десятки или даже сотни общих ресурсов. Не рекомендуется использование параметра --ghost в опциях монтирования карты auto.docs из главной карты, т.к. способ считается устаревшим.